﻿#pragma once
#ifndef WRTYPE_H
#define WRTYPE_H

#include <QUuid>
#include "../WRGlobal.h"
#include "../WRBasics.h"

//表示类型。
class WRType
{
    friend class WRTypeManager;

private:
    //类型标识。
    QUuid m_uuid;
    //基类类型。
    WRType* m_base;

    //复制构造函数（未实现）。
    WRType(const WRType& other);
    //赋值操作符（未实现）。
    WRType& operator=(const WRType& other);

    //构造函数（请勿直接调用）。
    inline WRType(const QUuid& uuid, WRType* base)
        : m_uuid(uuid), m_base(base)
    {
        //add code here
    }
    //析构函数。
    inline ~WRType()
    {
        //add code here
    }

public:
    //获取类型标识。
    inline const QUuid& uuid(void) const
    {
        return m_uuid;
    }
    //获取基类类型。
    inline WRType* base(void) const
    {
        return m_base;
    }

    //获取指定类型。
    WRSOFT_UTILITY_API static WRType* select(const QUuid& uuid);
    //注册新的类型。
    WRSOFT_UTILITY_API static WRType* enroll(const QUuid& uuid, WRType* base);

    //将类型写入数据中,并返回类型层次数。
    WRSOFT_UTILITY_API WR32s toBytes(void* buf) const;
    //创建新的类型。
    WRSOFT_UTILITY_API static WRType* fromBytes(const void* buf, WR32s cnt);
};

#endif // WRTYPE_H
